﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Text.RegularExpressions;
namespace GestorDeFlotasDesktop.AbmReloj
{
    public partial class AbmReloj : MasterPage
    {
        public capaDatos.SQLSyntaxisGeneration relojCD = new capaDatos.SQLSyntaxisGeneration();
        DataTable relojes,marcas;
        int altafin,baja;
        ArrayList array = new ArrayList();
        Form ventanPadre;
        public AbmReloj()
        {
            InitializeComponent();

           
            chHabilitado.Checked = true;
        }
        public AbmReloj(Form ventanaParam)
        {
            InitializeComponent();
                ocultarMenu(ref ventanPadre, ventanaParam);
                cargarMarcas();
                chHabilitado.Checked = false;
                altafin = 0;//botón de alta para altas puede presionarse o para iniciar un alta  
                  //o para confirmarla. Esta bandera diferencia qué es lo que desea el usuario.
                baja = 0;   
        }

        private void AbmReloj_Load(object sender, EventArgs e)
        {
            pnDatos.Visible = false;
            marca.Text="";
            monthCalendar1.Visible = false;
            
        }
        private void AbmReloj_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (ventanPadre != null)
            {
                ventanPadre.Visible = true;
            }
        }

        private void btAlta_Click_1(object sender, EventArgs e)
        {
            pnDatos.Visible = true;
            if (btAlta.Text == "Confirmar" && BTBaja.Text == "Cancelar" &&array.Count!=0&&altafin==0)//esto es una modificación
            {

                dataGridView1.Visible = false;
                BtbBuscar.Visible = false;
               
                int pos=Convert.ToInt32(array[array.Count-1]);//obtengo la posición seleccionada
                Boolean activo=Convert.ToBoolean(relojes.Rows[pos].ItemArray[5]);
                if (chHabilitado.Checked && !(activo))
                {//si está tildado como activo pero en la base de datos está como inactivo
                    //quiero rehabilitar un reloj
                  DataTable result = relojCD.executeSp("Pelusa.HabilitarReloj", parametrosStoredProcedure(paramsNames("id_reloj"), paramsValues(relojes.Rows[pos].ItemArray[0])));
                    if(Convert.ToString(result.Rows[0].ItemArray[0])=="error")
                        //en realidad, como el reloj es un campo obligatorio para habilitar un taxi,cuando se inhabilita un reloj vinculado a un taxi
                        //se informa al usuario pero no se quita la vinculación.(También se le informa cuando selecciona dicho taxi desde la abmauto.
                        //Como el taxi no puede efectuar operaciones con un reloj inhabilitado, el usuario puede
                        //cambiar el reloj desde la abmAuto. En dicho caso, al rehabilitar el reloj,no existen taxis con el que vincularlo hasta que se de de alta un nuevo taxi.
                        //
                        MessageBox.Show("El reloj ha vuelto a rehabilitarse,pero no existe ningún automóvil disponible para reasignarlo");
                    else
                        MessageBox.Show("El reloj ha vuelto a rehabilitarse. " + Convert.ToString(result.Rows[0].ItemArray[0]));

                }
                else if (!chHabilitado.Checked && (activo))
                { //si no está tildado como activo pero en la base de datos está como activo
                    //intenta inhabilitar un reloj desde modificación

                    MessageBox.Show("No se permite deshabilitar relojes desde la modificación. Para inhabilitar un reloj, presione el botón de Baja");
                  
                
                }
                DateTime fecha2 = Convert.ToDateTime(fecha.Text);
                relojCD.executeSp("PELUSA.modificarReloj", parametrosStoredProcedure(paramsNames("id_Reloj", "marca_Reloj", "modelo_Reloj", "fecha_Verificacion", "numeroSerieReloj"), paramsValues(relojes.Rows[pos].ItemArray[0], marca.Text, modelo.Text, fecha2.ToShortDateString(), nserie.Text)));
               
                 string query = "select idReloj 'ID Reloj',mr.modeloDescripcion 'modelo',m.nombreMarca 'Marca',";
                 query +="fechaVerificacionReloj 'Fecha de verificación',numeroSerieReloj 'Número de serie',activoReloj 'Habilitado'";
                 query += " from pelusa.reloj, pelusa.marcaReloj m,pelusa.modeloReloj mr where mr.idModelo=modeloReloj and m.idMarca=marcaReloj ";
                 query += " and idReloj=" + relojes.Rows[pos].ItemArray[0].ToString();


               relojes = relojCD.executeQuery(query);
               dataGridView1.Visible = true;
               this.dataGridView1.DataSource = relojes;
               btAlta.Text = "Alta";
               BTBaja.Text="Baja";
               pnDatos.Visible=false;
               chHabilitado.Checked = Convert.ToBoolean(relojes.Rows[0].ItemArray[5]);
               BtbBuscar.Visible = true;
               marca.Text = "";
               modelo.Text = "";
               nserie.Text = "";
               fecha.Text = "";
            
            }
            else if (altafin == 0 && btAlta.Text != "Inhabilitar" && btAlta.Text != "Confirmar")
            //estoy en un alta - primera parte- carga de datos por parte del usuario. 
            {
                btAlta.Text = "Confirmar";
                BTBaja.Text = "Cancelar";
                chHabilitado.Visible = false;
                altafin = 1;
                dataGridView1.Visible = false;
                BtbBuscar.Visible = false;

            }
            else if (btAlta.Text == "Confirmar" && BTBaja.Text == "Cancelar" && altafin == 1)
            { //estoy en la confirmación de un alta

                if (marca.Text == "" || modelo.Text == "" || nserie.Text == "" || fecha.Text == "")
                {

                    MessageBox.Show("Todos los campos son obligatorios. Por favor complete los campos restantes","ABM Reloj-Alta",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);


                }
                else { 
                
                //inserto el nuevo reloj. Si el modelo no existe, También realizo un insert sobre la tabla modelos.
                    relojCD.executeSp("PELUSA.AltaReloj", parametrosStoredProcedure(paramsNames("marca_Reloj","modelo_Reloj","fecha_Verificacion","numeroSerieReloj"), paramsValues(marca.Text, modelo.Text, fecha.Text, nserie.Text)));
                    altafin = 0;

                    string query = "select idReloj 'ID Reloj',mr.modeloDescripcion 'modelo',m.nombreMarca 'Marca',";
                    query += "fechaVerificacionReloj 'Fecha de verificación',numeroSerieReloj 'Número de serie',activoReloj 'Habilitado'";
                    query += " from pelusa.reloj, pelusa.marcaReloj m,pelusa.modeloReloj mr where mr.idModelo=modeloReloj and m.idMarca=marcaReloj ";
                    query += " and numeroSerieReloj ='" + nserie.Text + "' and mr.modeloDescripcion ='" + modelo.Text + "'";

                    query += " and m.nombreMarca='" + marca.Text + "'";

                    relojes = relojCD.executeQuery(query);
                    this.dataGridView1.DataSource = relojes;
                    dataGridView1.Visible = true;
                    btAlta.Text = "Alta";
                    BTBaja.Text = "Baja";
                    chHabilitado.Visible = true;
                    chHabilitado.Checked = true;
                    BtbBuscar.Visible = true;
                    pnDatos.Visible = false;
                    marca.Text = "";
                    modelo.Text = "";
                    nserie.Text = "";
                    fecha.Text = "";
                   

                }
            
            
            }
            else if (btAlta.Text == "Inhabilitar") {

                if (array.Count == 0)//si no se seleccionó ningún reloj
                {
                    MessageBox.Show("No ha seleccionado ningún reloj.", "ABM Reloj -Baja", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                }
                else {
                    DataTable result;
                    
                    result= relojCD.executeSp("Pelusa.DeshabilitarReloj", parametrosStoredProcedure(paramsNames("id_reloj"), paramsValues(relojes.Rows[Convert.ToInt32(array[array.Count-1])].ItemArray[0])));

                    MessageBox.Show(result.Rows[0].ItemArray[0].ToString());
                    altafin = 0;
                    baja = 0;
                    string query = "select idReloj 'ID Reloj',mr.modeloDescripcion 'modelo',m.nombreMarca 'Marca',";
                    query += "fechaVerificacionReloj 'Fecha de verificación',numeroSerieReloj 'Número de serie',activoReloj 'Habilitado'";
                    query += " from pelusa.reloj, pelusa.marcaReloj m,pelusa.modeloReloj mr where mr.idModelo=modeloReloj and m.idMarca=marcaReloj ";
                    query += " and idReloj=" + relojes.Rows[Convert.ToInt32(array[array.Count - 1])].ItemArray[0].ToString();
                    relojes = relojCD.executeQuery(query);
                    this.dataGridView1.DataSource = relojes;
                    dataGridView1.Visible = true;
                    btAlta.Text = "Alta";
                    BTBaja.Text = "Baja";
                    chHabilitado.Visible = true;
                    chHabilitado.Checked = true;
                    BtbBuscar.Visible = true;
                    pnDatos.Visible = false;
                    marca.Text = "";
                    modelo.Text = "";
                    nserie.Text = "";
                    fecha.Text = ""; 


                }
            
            }
        }

        private void BTBaja_Click_1(object sender, EventArgs e)
        {
            
            if (BTBaja.Text == "Cancelar") {
                pnDatos.Visible = false;
                dataGridView1.Visible = true;
                BtbBuscar.Visible = true;
                btAlta.Text = "Alta";
                BTBaja.Text = "Baja";
                btLimpiar_Click(sender, e);
                chHabilitado.Visible = true;
                altafin = 0;
                baja = 0;
            }
            if (BTBaja.Text != "Cancelar")
            {

                //Es una baja
                BTBaja.Text = "Cancelar";
                btAlta.Text = "Inhabilitar";
                baja = 1;

            }
            chHabilitado.Checked = false;
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            setearCheckBox(e.RowIndex, array, dataGridView1, pnDatos, btAlta);
            if(Convert.ToBoolean(relojes.Rows[e.RowIndex].ItemArray[5]))//reloj habilitado
                 chHabilitado.Checked = true;
            else
                 chHabilitado.Checked = false;

            if (btAlta.Text != "Inhabilitar" && BTBaja.Text != "Cancelar")//para una baja sí necesito ver estos botones y la tabla.
            {
                BTBaja.Visible = true;
                btAlta.Text = "Confirmar";
                BTBaja.Text = "Cancelar";
                btLimpiar.Visible = true;
                dataGridView1.Visible = false;
            }
            if (BTBaja.Text == "Cancelar" && baja == 1)
            {//si puse una búsqueda junto con un cancelar. Es una baja
                btAlta.Text = "Inhabilitar";
            }
            marca.Text = relojes.Rows[e.RowIndex].ItemArray[2].ToString();
            modelo.Text = relojes.Rows[e.RowIndex].ItemArray[1].ToString();
            fecha.Text=  relojes.Rows[e.RowIndex].ItemArray[3].ToString();
            nserie.Text = relojes.Rows[e.RowIndex].ItemArray[4].ToString();
            
        }
             private void cargarMarcas()
             {
                 string query = "select nombreMarca from PELUSA.marcaReloj";

                 marcas = relojCD.executeQuery(query);
                 marca.MaximumSize = GetPreferredSize(new Size(274, marcas.Rows.Count));
                 marca.DataSource = marcas;
                 marca.DisplayMember = marcas.Columns[0].ColumnName;
                 marca.Text = "";

            }

             private void BtbBuscar_Click(object sender, EventArgs e)
             {
                 string query = "select idReloj 'ID Reloj',mr.modeloDescripcion 'modelo',m.nombreMarca 'Marca',";
                 query +="fechaVerificacionReloj 'Fecha de verificación',numeroSerieReloj 'Número de serie',activoReloj 'Habilitado'";
                 query += " from pelusa.reloj, pelusa.marcaReloj m,pelusa.modeloReloj mr where mr.idModelo=modeloReloj and m.idMarca=marcaReloj ";
                 if(marca.Text!=""||nserie.Text!=""||modelo.Text!="")
                 {
                     query += " and numeroSerieReloj like '%" + nserie.Text + "%' and mr.modeloDescripcion like '%" +modelo.Text+"%'";
                     if (marca.Text != "") {

                         query += " and m.nombreMarca='" + marca.Text+"'";
                     
                     }
                 }

                 relojes =relojCD.executeQuery(query);
                 this.dataGridView1.DataSource = relojes;

                     
             }

             private void btLimpiar_Click(object sender, EventArgs e)
             {
                 marca.Text = "";
                 modelo.Text = "";
                 nserie.Text = "";
                 fecha.Text = "";
                 dataGridView1.DataSource = "";
             }

             private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
             {

             }

             private void button1_Click(object sender, EventArgs e)
             {
                 if (monthCalendar1.Visible)
                 {
                     monthCalendar1.Visible = false;
                     fecha.Text = monthCalendar1.SelectionStart.ToShortDateString();
                 }
                 else
                     monthCalendar1.Visible = true;

             }

             private void label5_Click(object sender, EventArgs e)
             {

             }

             private void nserie_TextChanged(object sender, EventArgs e)
             {
                 if (nserie.Text != "")
                 {
                     Regex expr_reg = new Regex(@"^([a-zA-Z0-9]|\s)+$");

                     if (!expr_reg.IsMatch(nserie.Text))
                     {
                         nserie.Text = "";
                         MessageBox.Show("Está ingresando un valor inválido.", "ABM Reloj", MessageBoxButtons.OK, MessageBoxIcon.Error);

                     }
                 }
             }

             private void modelo_TextChanged(object sender, EventArgs e)
             {
                 if (modelo.Text != "")
                 {
                     Regex expr_reg = new Regex(@"^([a-zA-Z0-9]|\s)+$");

                     if (!expr_reg.IsMatch(modelo.Text))
                     {
                         modelo.Text = "";
                         MessageBox.Show("Está ingresando un valor inválido.", "ABM Reloj", MessageBoxButtons.OK, MessageBoxIcon.Error);

                     }
                 }
             }


        }

       
    }

